package day14_io.demo07_ObjectOutputStream;
//每个类中实现了Serizalizable接口，当前类默认隐藏一个serialVersionUID，
//当类发生改变时,serialVersionUID会发生变化
//序列化和反序列化时通过serialVersionUID识别当前类是否相同
/*
序列化一个对象之后,类文件发生更改,会出现InvalidClassException:
因为当序列化运行时检测到类中的以下问题之一时抛出。
1:类的串行版本与从流中读取的类描述符的类型不匹配
2:该类包含未知的数据类型
3:该类没有可访问的无参数构造函数
 */

import java.io.*;

/*
解决方案:
在类中增加一个版本标识信息(序列化对象时,会由系统分配的版本标识)
protected static final long serialVersionUID = 42L;
 */
public class TestObject {
    public static void main(String[] args) throws Exception{
        Student student = new Student("张三",20);
        write(student);
        read(student);
    }
    public static void write(Student student) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\csw\\Demo\\b\\xd.txt"));
        oos.writeObject(student);
        oos.close();
    }
    public static void read(Student student) throws Exception{
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\csw\\Demo\\b\\xd.txt"));
        Object o = ois.readObject();
        Student o1 = (Student) o;
        System.out.println(o1.getName());
        System.out.println(o1.getAge());
        ois.close();
    }
}
